package vip.liux.contracts.security.externalLogin.authenticator;

import org.springframework.security.core.userdetails.UserDetails;

/**
 * 外部登录认证器通用接口，所有第三方登录认证方式需实现该接口。
 * 负责根据 providerKey 认证外部用户身份，并返回UserDetails。
 */
public interface ExternalLoginAuthenticator {
    /**
     * 根据 providerKey 进行第三方身份认证，认证失败建议抛出异常而不是返回null。
     *
     * @param providerKey 第三方平台的唯一标识（如token、openId等）
     * @return 认证通过的UserDetails
     * @throws Exception 认证失败时抛出统一异常
     */
    UserDetails authenticate(String providerKey) throws Exception;

    boolean supports(ExternalLoginProvider delimiter);
}